Skip to main content

KTN-04

FieldIsi
Dokumen IDKTN-04
DeskripsiMemberikan ambang batas barang kena pajak pada penjualan
Nomor Revisi2
Tanggal2026-10-04
KeteranganField diganti ke qty_minimal_pajak di SKU_Konversis; snapshot ikut ke baris penjualan dan SO

1. Ringkasan​

a. In scope​

  • Input ambang batas kena pajak (qty_minimal_pajak) per baris konversi satuan di master barang (SKU_Konversis)
  • Penyimpanan qty_minimal_pajak dalam satuan terkecil (input user × conversion_rate)
  • Snapshot qty_minimal_pajak pada baris penjualan (Penjualans) dan baris SO (SOs)
  • Informasi dan penerapan ambang batas saat membuat SO, penjualan langsung, dan penjualan atas SO

b. Catatan​

  • Ambang batas berada di tiap konversi satuan (SKU_Konversis), bukan di level barang / brand config
  • Nilai yang disimpan selalu dalam satuan terkecil agar perbandingan qty seragam
  • Karena ambang pajak berlaku per baris barang yang dijual / dipesan, qty_minimal_pajak ikut tersimpan di Penjualans dan SOs
  • Barang tetap memakai PPN master yang sama; yang menentukan kena pajak atau tidak adalah apakah qty baris melewati qty_minimal_pajak

c. Kesimpulan​

  • [FE] Tambah input qty_minimal_pajak pada tiap baris SKU_Konversis saat create / update master barang; simpan sebagai input × conversion_rate
  • [FE] Tampilkan dan terapkan ambang batas pada SO
  • [FE] Tampilkan dan terapkan ambang batas pada penjualan langsung
  • [FE] Tampilkan dan terapkan ambang batas pada penjualan atas SO
  • [BE] Tambah kolom qty_minimal_pajak pada SKU_Konversis, Penjualans, dan SOs
  • [BE] Create / update barang menerima dan menyimpan qty_minimal_pajak per konversi (nilai sudah dalam satuan terkecil)
  • [BE] Create / update SO, penjualan, dan penjualan atas SO menerima qty_minimal_pajak per baris dan menerapkan logika PPN vs ambang batas

2. Functional Requirement​

KodeDeskripsi
FR-01Tiap baris SKU_Konversis memiliki field qty_minimal_pajak
FR-02Saat create / update barang, qty_minimal_pajak disimpan sebagai input user dikali conversion_rate ke satuan terkecil
FR-03qty_minimal_pajak ikut tersimpan pada tiap baris Penjualans
FR-04qty_minimal_pajak ikut tersimpan pada tiap baris SOs
FR-05Informasi ambang batas tampil dan dipakai pada SO, penjualan langsung, dan penjualan atas SO
FR-06Jika qty baris (satuan terkecil) melewati qty_minimal_pajak, PPN wajib diterapkan pada baris tersebut

3. Use Case List​

KodeDeskripsi
UC-01Mengisi qty minimal pajak pada konversi satuan master barang
UC-02Melihat dan menerapkan ambang batas saat membuat SO
UC-03Melihat dan menerapkan ambang batas saat membuat penjualan langsung
UC-04Melihat dan menerapkan ambang batas saat membuat penjualan atas SO
UC-05Memastikan baris yang melewati ambang batas dikenai PPN

4. Use Case Scenario​

UC-01 : Mengisi qty minimal pajak pada konversi satuan master barang​

AktorPengguna master barang
DeskripsiUser mengisi ambang batas kena pajak per konversi satuan saat membuat / mengubah barang
Prekondisi- Pengguna terautentikasi
- Memiliki akses master barang
- Halaman create / edit barang dapat dibuka
Alur utama1. User membuka form buat / edit barang.
2. User mengatur SKU dan daftar konversi satuan.
3. Pada tiap baris SKU_Konversis, user mengisi qty minimal pajak dalam satuan konversi tersebut.
4. Sistem menghitung nilai simpan = input × conversion_rate ke satuan terkecil.
5. User menyimpan barang.
Alur negatif- Jika validasi field gagal, data tidak tersimpan dan muncul pesan error.
- Jika pengguna tidak berwenang, simpan ditolak.
Bisnis rule- Setiap konversi punya qty_minimal_pajak sendiri.
- Nilai tersimpan selalu dalam satuan terkecil (input × conversion_rate).
- Untuk satuan terkecil, conversion_rate = 1 sehingga nilai simpan = input user.
PostkondisiTiap SKU_Konversis memiliki qty_minimal_pajak
TriggerUser membuat atau mengedit barang
Kode FRFR-01
FR-02

UC-02 : Melihat dan menerapkan ambang batas saat membuat SO​

AktorPengguna SO
DeskripsiUser melihat ambang batas per baris dan sistem menerapkan PPN sesuai ambang saat membuat SO
Prekondisi- Pengguna terautentikasi
- Hak akses SO
- Master barang sudah punya qty_minimal_pajak pada konversi yang dipakai
Alur utama1. User membuka halaman buat SO.
2. User menambah baris barang dan memilih satuan / konversi.
3. Sistem menampilkan informasi ambang batas dari SKU_Konversis terkait.
4. Saat simpan, tiap baris SOs menyimpan snapshot qty_minimal_pajak.
5. Jika qty baris (satuan terkecil) melewati ambang, PPN baris diterapkan.
Alur negatif- Jika gagal memuat data barang / konversi, ambang batas tidak tampil dan muncul pesan error.
- Jika brand tidak PKP (default_pengusaha_kena_pajak = 0), logika ambang batas diabaikan.
Bisnis rule- Ambang pajak per baris SO, bukan per header.
- qty_minimal_pajak pada SOs adalah snapshot dari konversi yang dipakai.
PostkondisiSO tersimpan dengan qty_minimal_pajak dan PPN baris sesuai ambang
TriggerUser membuat SO
Kode FRFR-04
FR-05
FR-06

UC-03 : Melihat dan menerapkan ambang batas saat membuat penjualan langsung​

AktorPengguna penjualan
DeskripsiUser melihat ambang batas per baris dan sistem menerapkan PPN sesuai ambang saat membuat penjualan langsung
Prekondisi- Pengguna terautentikasi
- Hak akses penjualan
- Halaman buat penjualan dapat dibuka
Alur utama1. User membuka halaman buat penjualan langsung.
2. User menambah baris barang dan memilih satuan / konversi.
3. Sistem menampilkan informasi ambang batas dari SKU_Konversis terkait.
4. Saat simpan, tiap baris Penjualans menyimpan snapshot qty_minimal_pajak.
5. Jika qty baris (satuan terkecil) melewati ambang, PPN baris diterapkan.
Alur negatif- Jika gagal memuat data barang / konversi, ambang batas tidak tampil dan muncul pesan error.
- Jika brand tidak PKP (default_pengusaha_kena_pajak = 0), logika ambang batas diabaikan.
Bisnis rule- Ambang pajak per baris penjualan.
- qty_minimal_pajak pada Penjualans adalah snapshot dari konversi yang dipakai.
PostkondisiInvoice penjualan tersimpan dengan qty_minimal_pajak dan PPN baris sesuai ambang
TriggerUser membuat penjualan langsung
Kode FRFR-03
FR-05
FR-06

UC-04 : Melihat dan menerapkan ambang batas saat membuat penjualan atas SO​

AktorPengguna penjualan
DeskripsiUser membuat penjualan dari SO dengan ambang batas ikut terbawa / diterapkan per baris
Prekondisi- Pengguna terautentikasi
- SO terkait sudah ada
- Hak akses penjualan atas SO
Alur utama1. User membuka halaman buat penjualan atas SO.
2. Sistem memuat baris SO beserta qty_minimal_pajak.
3. User melengkapi data penjualan bila perlu.
4. Saat simpan, tiap baris Penjualans menyimpan qty_minimal_pajak.
5. Jika qty baris (satuan terkecil) melewati ambang, PPN baris diterapkan.
Alur negatif- Jika SO tidak ditemukan, proses tidak dilanjutkan.
- Jika brand tidak PKP, logika ambang batas diabaikan.
- Jika validasi gagal, penjualan tidak tersimpan.
Bisnis rule- Ambang batas pada penjualan atas SO tetap per baris barang.
- Snapshot di Penjualans mengikuti nilai ambang yang dipakai pada transaksi (dari SO / konversi terkait).
PostkondisiPenjualan atas SO tersimpan dengan qty_minimal_pajak dan PPN sesuai ambang
TriggerUser membuat penjualan atas SO
Kode FRFR-03
FR-05
FR-06

UC-05 : Memastikan baris yang melewati ambang batas dikenai PPN​

AktorSistem BE
DeskripsiBE memastikan perhitungan PPN baris mengikuti qty_minimal_pajak
PrekondisiFE mengirim payload SO / penjualan yang valid
Alur utama1. FE menembak API create / update SO atau penjualan.
2. BE cek config brand default_pengusaha_kena_pajak. Jika nonaktif, abaikan logika ambang batas.
3. Untuk tiap baris, bandingkan qty dalam satuan terkecil dengan qty_minimal_pajak baris.
4. Jika qty melewati ambang, terapkan PPN baris; jika tidak, tidak menerapkan PPN baris.
5. Simpan header + baris termasuk qty_minimal_pajak dan nilai PPN.
Alur negatif- Jika payload tidak valid, request ditolak.
- Jika brand non-PKP, seluruh logika ambang dilewati.
Bisnis rule- Perbandingan qty memakai satuan terkecil.
- Ambang batas dicek per baris, bukan per invoice.
PostkondisiDokumen tersimpan dengan PPN sesuai ambang batas
TriggerCreate / update SO, penjualan langsung, atau penjualan atas SO
Kode FRFR-06

5. Data Flow Diagram​

DFD-01 — Ambang batas kena pajak dari konversi ke transaksi​

6. Sequence Diagram​

SD-01 — UC-01 : Mengisi qty minimal pajak pada konversi satuan master barang​

SD-02 — UC-02 : Melihat dan menerapkan ambang batas saat membuat SO​

SD-03 — UC-03 : Melihat dan menerapkan ambang batas saat membuat penjualan langsung​

SD-04 — UC-04 : Melihat dan menerapkan ambang batas saat membuat penjualan atas SO​

SD-05 — UC-05 : Memastikan baris yang melewati ambang batas dikenai PPN​

7. Table Schema​

TableFieldStatusDeskripsi
SKU_Konversisqty_minimal_pajaknewAmbang qty kena pajak per konversi; disimpan dalam satuan terkecil (input × conversion_rate)
Penjualansqty_minimal_pajaknewSnapshot ambang pajak per baris penjualan
SOsqty_minimal_pajaknewSnapshot ambang pajak per baris SO

8. API Schema​

EndpointStatusPerubahan
POST /[url_barang]/v2-1/barangchangedTerima qty_minimal_pajak di sku.SKU_Konversis / konversi
POST /[url_barang]/v2-1/barang/bulk-updatechangedTerima qty_minimal_pajak di sku.SKU_Konversis / konversi
GET /[url_barang]/barangchangedResponse SKU_Konversis memuat qty_minimal_pajak
GET /[url_barang]/barang/:idchangedResponse SKU_Konversis memuat qty_minimal_pajak
POST /[url_penjualan]/invoice-sochangedTerima / simpan qty_minimal_pajak per baris SO + logika PPN vs ambang
GET /[url_penjualan]/invoice-so/:idchangedResponse SOs memuat qty_minimal_pajak
POST /[url_penjualan]/penjualanchangedTerima / simpan qty_minimal_pajak per baris penjualan + logika PPN vs ambang
PUT /[url_penjualan]/penjualan/:idchangedUpdate baris penjualan termasuk qty_minimal_pajak bila relevan